잭슨 구조적 프로그래밍
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
잭슨 구조적 프로그래밍(JSP)은 1970년대 마이클 A. 잭슨이 개발한 프로그램 설계 방법론으로, 입력 및 출력 데이터 구조를 기반으로 프로그램의 구조를 결정하여 유지 보수성을 높이는 것을 목표로 한다. JSP는 순차, 선택, 반복의 세 가지 기본 구조를 사용하여 데이터 구조를 시각적으로 나타내는 잭슨 구조도를 활용하며, COBOL 일괄 파일 처리 프로그램의 수정 및 유지를 용이하게 하기 위해 개발되었으나, 모든 구조적 제어 구문을 가진 프로그래밍 언어에 적용될 수 있다. JSP는 입력 및 출력 구조를 분석하고, 이를 프로그램 구조 다이어그램(PSD)으로 통합하여 설계하며, 구조 충돌과 같은 설계 문제를 해결하기 위한 기법을 제시한다. JSP는 객체 지향 프로그래밍이 등장하기 전에 개발되었지만, 클래스 내 메서드의 제어 흐름을 구조화하는 데 여전히 유용하게 사용될 수 있다.
더 읽어볼만한 페이지
- 다이어그램 - 회로도
회로도는 전기 또는 전자 회로의 구성 요소와 연결을 기호와 선으로 나타낸 도식적 표현으로, 표준화된 기호와 규칙을 따르며 전자 제품 설계 및 교육에 필수적인 도구이지만 표기법 통일은 아직 완벽하지 않다. - 다이어그램 - 헤르츠스프룽-러셀 도표
헤르츠스프룽-러셀 도표(HR도표)는 항성의 광도와 표면 온도 관계를 나타내는 그래프로, 항성의 분류, 진화 단계, 물리적 특성을 이해하는 데 필수적인 도구이며, 주계열성, 거성, 초거성 등 다양한 항성의 종류와 분포를 보여주며 항성물리학 발전에 기여한다. - 프로그래밍 패러다임 - 지식 표현
지식 표현은 컴퓨터가 인간의 지식을 이해하고 활용하도록 정보를 구조화하는 기술이며, 표현력과 추론 효율성의 균형, 불확실성 처리 등을 핵심 과제로 다양한 기법과 의미 웹 기술을 활용한다. - 프로그래밍 패러다임 - 의도적 프로그래밍
의도적 프로그래밍은 프로그래머의 의도를 명확히 포착하고 활용하여 소프트웨어 개발 생산성을 향상시키기 위한 프로그래밍 패러다임으로, 트리 기반 저장소를 사용해 코드 의미 구조를 보존하고, WYSIWYG 환경에서 도메인 전문가와 협업하며, 코드 상세 수준 조절 및 자동 문서화를 통해 가독성과 유지보수성을 높이는 데 중점을 둔다. - 표시 이름과 문서 제목이 같은 위키공용분류 - 라우토카
라우토카는 피지 비치레부섬 서부에 위치한 피지에서 두 번째로 큰 도시이자 서부 지방의 행정 중심지로, 사탕수수 산업이 발달하여 "설탕 도시"로 알려져 있으며, 인도에서 온 계약 노동자들의 거주와 미 해군 기지 건설의 역사를 가지고 있고, 피지 산업 생산의 상당 부분을 담당하는 주요 기관들이 위치해 있다. - 표시 이름과 문서 제목이 같은 위키공용분류 - 코코넛
코코넛은 코코넛 야자나무의 열매로 식용 및 유지로 사용되며, 조리되지 않은 과육은 100g당 354kcal의 열량을 내는 다양한 영양 성분으로 구성되어 있고, 코코넛 파우더의 식이섬유는 대부분 불용성 식이섬유인 셀룰로오스이며, 태국 일부 지역에서는 코코넛 수확에 훈련된 원숭이를 이용하는 동물 학대 문제가 있다.
잭슨 구조적 프로그래밍 | |
---|---|
일반 정보 | |
이름 | 잭슨 구조적 프로그래밍 |
원어 이름 | Jackson Structured Programming |
고안자 | 마이클 앤서니 잭슨 |
발표 연도 | 1975년 |
특징 | |
유형 | 구조적 프로그래밍 방법론 |
목적 | 프로그램 설계 및 개발 |
접근 방식 | 문제 영역의 구조를 기반으로 프로그램 구조 모델링 |
주요 개념 | 모델링 구조 다이어그램 구조 충돌 해결 |
장점 | |
장점 | 문제 이해도 향상 유지보수 용이성 증가 코드 가독성 향상 체계적인 설계 가능 |
단점 | |
단점 | 복잡한 문제에 적용 시 어려움 프로그램 구조와 데이터 구조 간의 불일치 발생 가능성 숙련된 설계자 필요 |
관련 개념 | |
관련 개념 | 구조적 프로그래밍 소프트웨어 공학 프로그래밍 패러다임 |
2. 역사적 배경
데이크스트라 등에 의해 시작된 구조적 프로그래밍은 "단선적인 계산 프로세스의 진행"과 "그것을 생성하는 정적인 소스 코드의 기술 진행"이 직접적으로 대응해야 한다는 주장을 바탕으로[9], 무질서하게 기술되었던 순서도(flowchart)를 하나의 계층마다 위에서 아래로 읽을 수 있도록 단선화(구조화)하는 단계적 상세화를 가져왔으며[10], "(구조화된) 순서도에서 직접 프로그래밍 언어로의 번역이 가능하다"고 주장했다.[11]。이는 프로그램의 구조화 개념과 사전에 수행하는 책상 설계라는 개념을 부여했지만, 정작 순서도에서 구체적으로 프로그램을 도출하는 방법에 대해서는 모호했다.[12]。
마이클 A. 잭슨은 데이터 구조 분석 표기법으로 '''잭슨 구조도'''(Jackson structure diagram)를 제안했다.[15] 잭슨은 코딩 전에 설계를 해야 하지만, 흐름도는 제어 흐름을 기술하는 것이므로 문제의 구조를 파악하기 어렵게 만든다고 보았다.[17] 그는 흐름도 대신 데이터 구조를 중심으로 생각해야 한다고 주장했다.
마이클 A. 잭슨이 1970년대에 개발한 JSP는 프로그램의 입출력 구조를 프로그램 자체의 구조에 반영하여 프로그램 수정 용이성을 높이는 것을 목표로 한다.[1] JSP는 프로그램 설계를 위해 다음과 같은 네 가지 구성 요소 유형을 사용한다.
이에 대해, 영국 출신의 컨설턴트 마이클 A. 잭슨은 순서도는 애초에 제어 흐름을 기술하는 것이며, 그것으로부터 만들어진 프로그램은 변경에도 취약해지므로[13], 프로그램 설계 시에는 제어를 중심으로 생각하는 순서도는 피하고[14], 데이터 구조를 중심으로 생각해야 한다고 주장했다.
잭슨은 데이터 구조의 분석 표기법으로 '''잭슨 구조도''' (Jackson structure diagram)[15]를 제안한 후, 데이크스트라의 구조적 프로그래밍에서 하나의 입구와 하나의 출구를 갖는 순차적 프로그램의 입출력 구조를 그 잭슨 구조도로 기술함으로써 구체적으로 도출하는 방법, '''잭슨 구조적 프로그래밍''' ('''J'''ackson '''S'''tructured '''P'''rogramming, '''JSP''')을 개발했다.
3. 잭슨 구조도
다익스트라는 알고리즘을 먼저 결정하고 데이터 구조를 도출하는 데이터 추상화 기법을 사용했지만, 잭슨은 반대로 데이터 구조를 먼저 분석하고 알고리즘 등의 프로그램 구조를 결정해야 한다고 했다.[18] 호어가 주장한 제어 구조와 데이터 구조의 대응 관계[19]를 바탕으로, 잭슨은 흐름도의 분해 대신 데이터 구조 분석 수단으로 잭슨 구조도를 제안했다.
잭슨 구조도는 데이터 구조를 다음 세 가지 유형으로 분해하여 표현한다.
4. 잭슨 구조적 프로그래밍 (JSP)의 기본 방법
JSP 설계는 다이어그램 표기법을 사용하여 시각적으로 표현된다.
JSP는 다음과 같은 단계를 거쳐 프로그램을 설계한다.
1. 입력 구조 정의: 프로그램의 입력 데이터 구조를 분석하고, 위에서 설명한 네 가지 구성 요소 유형을 사용하여 다이어그램으로 표현한다.
2. 출력 구조 정의: 프로그램의 출력 데이터 구조를 분석하고, 입력 구조와 마찬가지로 다이어그램으로 표현한다.
3. 프로그램 구조 생성: 입력 구조와 출력 구조를 통합하여 프로그램 구조를 생성한다. 이 과정에서 입력과 출력을 결합하기 위한 상위 수준 제어 구조가 추가될 수 있다.
4. 상세 설계: 프로그램 구조 다이어그램에 각 구성요소에 필요한 작업과 조건을 추가하여 설계를 구체화한다.
5. 구현: 완성된 다이어그램을 바탕으로 특정 프로그래밍 언어를 사용하여 프로그램을 코딩한다.
예를 들어, 런 길이 인코더를 JSP를 사용하여 설계하는 경우, 입력 스트림은 동일한 바이트 값의 0번 이상의 '런(Run)'으로 구성되고, 출력 스트림은 0번 이상의 바이트 쌍 반복으로 구성된다. 이러한 입출력 스트림의 데이터 구조를 분석하고, 프로그램 구조를 생성하는 과정을 통해 런 길이 인코더를 설계할 수 있다.
JSP는 워니어/오어 구조적 프로그래밍과 유사하지만,[3][4] 입출력 데이터 구조를 모두 고려한다는 차이점이 있다.
5. 어려운 설계 문제 해결 기법
JSP가 개발될 당시 대부분의 프로그램은 테이프에 저장된 순차 파일을 처리하는 일괄 COBOL 프로그램이었다. 잭슨은 그의 저서 ''프로그램 설계 원리''(Principles of Program Design)[1]에서 특정 종류의 설계 문제를 제기하는 상황을 인식하고, 이를 처리하기 위한 기술을 제공했다.
잭슨이 제시한 어려운 설계 문제 해결 기법은 다음과 같다.
- 다중 입력 파일 처리: 프로그램이 두 개의 입력 파일을 처리하는 경우가 있었다. 1975년에 트랜잭션 처리 프로그램을 설계하는 방법은 어려운 문제 중 하나였다. 이러한 프로그램에서 업데이트 레코드의 순차적 파일은 순차적 마스터 파일에 대해 실행되어 업데이트된 마스터 파일을 출력으로 생성한다. 예를 들어, 야간에 은행은 고객의 예금 및 인출 기록을 기반으로 고객 계좌의 잔액을 업데이트하는 배치 프로그램을 실행한다. ''프로그램 설계 원리''는 이러한 문제에 대한 표준 솔루션을 제공하고 설계의 논리를 설명했다.
- 인식 어려움 (파싱 문제): "인식 어려움"이라고 부르고 오늘날에는 파싱 문제라고 부르는 것과 관련이 있다. 기본 JSP 설계 기술은 현재 백트래킹 파서라고 부르는 것을 설계하기 위해 POSIT 및 QUIT 연산으로 보완되었다.
- 구조 충돌: JSP는 "구조 충돌"이라고 불리는 세 가지 상황, 즉 경계 충돌, 순서 충돌 및 인터리빙 충돌을 인식하고 이를 처리하기 위한 기술을 제공했다. 구조 충돌 상황에서 입력 및 출력 데이터 구조는 호환되지 않아 입력 파일에서 출력 파일을 생성하는 것이 불가능하다. 사실상 두 개의 프로그램을 작성해야 한다. 첫 번째 프로그램은 입력 스트림을 처리하고 더 작은 덩어리로 분해하여 중간 파일에 쓴다. 두 번째 프로그램은 중간 파일을 읽고 원하는 출력을 생성한다.
6. JSP와 객체 지향 설계
JSP는 객체 지향 기술이 등장하기 훨씬 전에 개발되었다. JSP와 그 후속 방법인 JSD는 현재 "객체"라고 불리는 것을 다소 독립적인 메서드의 모음으로 취급하지 않는다. 대신, C. A. R. 호어의 연구를 따라 JSP와 JSD는 소프트웨어 객체를 코루틴으로 묘사한다.[5][6]
7. 현대적 응용
JSP는 객체 지향 기술이 나오기 훨씬 전에 개발되었지만, 클래스의 메서드 내에서 제어 흐름을 구조화하는 데 도움이 될 수 있다.[1] JSP와 그 후속 방법인 JSD는 현재 "객체"라고 불리는 것을 다소 독립적인 메서드의 모음으로 취급하지 않고, C. A. R. 호어의 연구를 따라 소프트웨어 객체를 코루틴으로 묘사한다.[5][6]
참조
[1]
서적
Principles of Program Design
Academic
[2]
간행물
JSP in Perspective
http://mcs.open.ac.u[...]
2017-01-26
[3]
서적
Logical Construction of Programs
Van Nostrand Reinhold
[4]
간행물
Proceedings of the ACM 1980 Annual Conference
ACM Press
[5]
학술지
A survey of structured and object-oriented software specification methods and techniques
1998-12
[6]
학술지
The object-oriented systems life cycle
1990-09
[7]
문서
Jackson(1975)
[8]
문서
ジャクソンのシステム開発法
[9]
문서
ダイクストラ(1972)
[10]
문서
ダイクストラ(1972)
[11]
문서
ダイクストラ(1972)
[12]
문서
Jackson(1975)
[13]
문서
Jackson(1975)
[14]
문서
Jackson(1975)
[15]
문서
飯泉・大槻(2011)
[16]
문서
Jackson(1995)
[17]
문서
Jackson(1975)
[18]
문서
Jackson(1975)
[19]
문서
ホーア(1972)
[20]
문서
Jackson(1995)
[21]
서적
Principles of Program Design
Academic
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com